﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestorSQL.BLL;
using GestorSQL.BusinessEntities;
using GestorSQL.GUI.UsersInRoles;

namespace GestorSQL.GUI
{
    public partial class ManagementTools : Form
    {
        private ConnectionManager _connManager = new ConnectionManager();
        private ParameterManager _paramaeterManager = new ParameterManager();
        private SecurityManager _securityManager = new SecurityManager();


        #region Constructor


        /// <summary>
        /// Constructor Management Tools - Gestor de Herramientas
        /// </summary>
        public ManagementTools()
        {
            InitializeComponent();

            tv_gestionHerramientas.Nodes.Add(new TreeNode("Conexiones"));
            tv_gestionHerramientas.Nodes.Add(new TreeNode("Parametros"));
            tv_gestionHerramientas.Nodes.Add(new TreeNode("Usuarios"));
            dGridConexiones.DataSource = _connManager.GetConnectionsList();
            tab.SelectedTab = tabConexiones;
            dGridParametros.DataSource = _paramaeterManager.GetListParameters();
            dGridUsuarios.DataSource = _securityManager.GetUsersList();

        }

        #endregion

        #region Eventos

        #region Eventos - Conexiones

        /// <summary>
        /// Evento Crear Conexion
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCrearConexion_Click(object sender, EventArgs e)
        {

            AddConnection addConnection = new AddConnection();
            addConnection.ShowDialog();

        }


        /// <summary>
        /// Editar Conexion Base de datos.
        /// 
        /// No es posible actualizar la conexion de base de datos si esta asociada con una solucion o caso
        /// en ejecucion.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnEditar_Click(object sender, EventArgs e)
        {


            try
            {
                if (dGridConexiones.SelectedRows.Count > 0)
                {
                    Conexion conexionSeleccionada = dGridConexiones.SelectedRows[0].DataBoundItem as Conexion;
                    AddConnection addConnection = new AddConnection(conexionSeleccionada);
                    DialogResult dr = addConnection.ShowDialog();

                    if (dr == DialogResult.OK)
                        dGridConexiones.DataSource = _connManager.GetConnectionsList();
                }
            }
            catch
            {
                MessageBox.Show(Properties.Resources.Connection_ConnectionAssigned_Edit);
            }


        }


        /// <summary>
        /// Evento Eliminar una conexion de Base de Datos
        /// No es posible actualizar la conexion de base de datos si esta asociada con una solucion o caso
        /// en ejecucion.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (dGridConexiones.SelectedRows.Count > 0)
            {

                Conexion conexionSeleccionada = dGridConexiones.SelectedRows[0].DataBoundItem as Conexion;
                if (_connManager.RemoveConnection(conexionSeleccionada.Nombre.Trim()).Equals(Resultado.Exitoso))
                    dGridConexiones.DataSource = _connManager.GetConnectionsList();
                else
                    MessageBox.Show(Properties.Resources.Connection_ConnectionAssigned_New);

            }

        }

        #endregion

        #region Eventos - Arbol

        /// <summary>
        /// Evento Cuando se selecciona un elemento en el arbol
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tv_gestionHerramientas_DoubleClick(object sender, EventArgs e)
        {

            // Conexiones
            if (tv_gestionHerramientas.SelectedNode.Text.Equals("Conexiones"))
            {
                dGridConexiones.DataSource = _connManager.GetConnectionsList();
                tab.SelectedTab = tabConexiones;
            }
            // Parametros
            else if (tv_gestionHerramientas.SelectedNode.Text.Equals("Parametros"))
            {
                dGridParametros.DataSource = _paramaeterManager.GetListParameters();
                tab.SelectedTab = tabParametros;
            }

                // Usuarios
            else if (tv_gestionHerramientas.SelectedNode.Text.Equals("Usuarios"))
            {
                dGridUsuarios.DataSource = _securityManager.GetUsersList();
                tab.SelectedTab = tabUsuarios;
            }


        }

        #endregion

        #region Eventos - Tab Parametros


        /// <summary>
        /// Evento se lanza cuando se realiza un cambio en la grilla de parametros
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dGridParametros_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            Parametro parametroActualizado;

            if (dgv.SelectedCells.Count > 0)
            {
                parametroActualizado = (dgv.Rows[(dgv.SelectedCells[0].RowIndex)].DataBoundItem as Parametro);
                _paramaeterManager.UpdateParameter(parametroActualizado);
            }
        }

        #endregion

        #region Eventos - Tab Control


        /// <summary>
        /// Evento se dispara cuando se selecciona un Tab del Tab Control
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tab_Selected(object sender, TabControlEventArgs e)
        {
            TabControl tc = (TabControl)sender;

            //Selecciona el Tab de Parametros
            if (tc.SelectedTab.Name.Equals("tabParametros"))
                dGridParametros.DataSource = _paramaeterManager.GetListParameters();

            //Selecciona el Tab de Usuarios
            else if (tc.SelectedTab.Name.Equals("tabUsuarios"))
                dGridUsuarios.DataSource = _securityManager.GetUsersList();


            //Selecciona el Tab de Conexiones
            else if (tc.SelectedTab.Name.Equals("tabConexiones"))
                dGridConexiones.DataSource = _connManager.GetConnectionsList();
        }

        #endregion

        #region Eventos - Tab Usuarios

        private void dGridUsuarios_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                RolesManagement rolesManagement = new RolesManagement((dGridUsuarios.Rows[e.RowIndex].DataBoundItem as UserInRole).Usuario);
                DialogResult dr = rolesManagement.ShowDialog();

                if (dr.Equals(DialogResult.OK))
                    dGridUsuarios.DataSource = _securityManager.GetUsersList();
            }
        }


        private void btnAsignarNuevoUsuario_Click(object sender, EventArgs e)
        {
            RolesManagement rolesManagement = new RolesManagement();
            DialogResult dr = rolesManagement.ShowDialog();


            if (dr.Equals(DialogResult.OK))
                dGridUsuarios.DataSource = _securityManager.GetUsersList();
        }

        #endregion


        #endregion







    }
}
